home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 April / SGI IRIX 6.5 Applications 2004 April.iso / dist / mpi.idb / usr / include / mpio.h.z / mpio.h
C/C++ Source or Header  |  2003-06-17  |  18KB  |  427 lines

  1. /* 
  2.  *   $Id: mpio.h,v 1.16 2003/04/28 21:18:38 tds Exp $    
  3.  *
  4.  *   Copyright (C) 1997 University of Chicago. 
  5.  *   See COPYRIGHT notice in top-level directory.
  6.  */
  7.  
  8. /* user include file for MPI-IO programs */
  9.  
  10. #ifndef MPIO_INCLUDE
  11. #define MPIO_INCLUDE
  12.  
  13. #include "mpi.h"
  14.  
  15. #if defined(__cplusplus)
  16. extern "C" {
  17. #endif
  18.  
  19. #define ROMIO_VERSION 124 /* version 1.2.4 */
  20.  
  21. /* define MPI-IO datatypes and constants */
  22.  
  23. typedef struct ADIOI_FileD *MPI_File;
  24.  
  25. /* no generalized requests as yet */
  26. #ifdef COMPILING_ROMIO_LIBRARY
  27. typedef struct ADIOI_RequestD *MPIO_Request;  
  28. #else
  29. #define MPIO_Request MPI_Request
  30. #endif
  31.  
  32. #ifdef __linux
  33. typedef long long MPI_Offset;
  34. #else
  35. #include <sgidefs.h>
  36. typedef __int64_t MPI_Offset;
  37. #endif
  38.  
  39. #ifndef NEEDS_MPI_FINT
  40.  
  41. #endif
  42. #ifdef NEEDS_MPI_FINT
  43. typedef int MPI_Fint; 
  44. #endif
  45.  
  46. #ifndef HAVE_MPI_INFO
  47. #define HAVE_MPI_INFO
  48. #endif
  49. #ifndef HAVE_MPI_INFO
  50.   typedef struct MPIR_Info *MPI_Info;
  51. # define MPI_INFO_NULL         ((MPI_Info) 0)
  52. # define MPI_MAX_INFO_KEY       255
  53. # define MPI_MAX_INFO_VAL      1024
  54. #endif
  55.  
  56. #define MPI_MODE_RDONLY              2  /* ADIO_RDONLY */
  57. #define MPI_MODE_RDWR                8  /* ADIO_RDWR  */
  58. #define MPI_MODE_WRONLY              4  /* ADIO_WRONLY  */
  59. #define MPI_MODE_CREATE              1  /* ADIO_CREATE */ 
  60. #define MPI_MODE_EXCL               64  /* ADIO_EXCL */
  61. #define MPI_MODE_DELETE_ON_CLOSE    16  /* ADIO_DELETE_ON_CLOSE */
  62. #define MPI_MODE_UNIQUE_OPEN        32  /* ADIO_UNIQUE_OPEN */
  63. #define MPI_MODE_APPEND            128  /* ADIO_APPEND */
  64. #define MPI_MODE_SEQUENTIAL        256  /* ADIO_SEQUENTIAL */
  65.  
  66. #define MPI_DISPLACEMENT_CURRENT   -54278278
  67.  
  68. #define MPI_FILE_NULL           ((MPI_File) 0)
  69. #define MPIO_REQUEST_NULL       ((MPIO_Request) 0)
  70.  
  71. #define MPI_SEEK_SET            600
  72. #define MPI_SEEK_CUR            602
  73. #define MPI_SEEK_END            604
  74.  
  75. #define MPI_MAX_DATAREP_STRING  128
  76.  
  77. #define MPI_ORDER_C             56
  78. #define MPI_ORDER_FORTRAN       57
  79. #define MPI_DISTRIBUTE_BLOCK    121
  80. #define MPI_DISTRIBUTE_CYCLIC   122
  81. #define MPI_DISTRIBUTE_NONE     123
  82. #define MPI_DISTRIBUTE_DFLT_DARG -49767
  83.  
  84.  
  85. /* MPI-IO function prototypes */
  86.  
  87. /* The compiler must support ANSI C style prototypes, otherwise 
  88.    long long constants (e.g. 0) may get passed as ints. */
  89.  
  90. #ifndef HAVE_PRAGMA_HP_SEC_DEF
  91.  
  92. /* Section 9.2 */
  93. int MPI_File_open(MPI_Comm comm, char *filename, int amode, 
  94.                           MPI_Info info, MPI_File *fh);
  95. int MPI_File_close(MPI_File *fh);
  96. int MPI_File_delete(char *filename, MPI_Info info);
  97. int MPI_File_set_size(MPI_File fh, MPI_Offset size);
  98. int MPI_File_preallocate(MPI_File fh, MPI_Offset size);
  99. int MPI_File_get_size(MPI_File fh, MPI_Offset *size);
  100. int MPI_File_get_group(MPI_File fh, MPI_Group *group);
  101. int MPI_File_get_amode(MPI_File fh, int *amode);
  102. int MPI_File_set_info(MPI_File fh, MPI_Info info);
  103. int MPI_File_get_info(MPI_File fh, MPI_Info *info_used);
  104.  
  105. /* Section 9.3 */
  106. int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype,
  107.              MPI_Datatype filetype, char *datarep, MPI_Info info);
  108. int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, 
  109.                  MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep);
  110.  
  111. /* Section 9.4.2 */
  112. int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf,
  113.           int count, MPI_Datatype datatype, MPI_Status *status);
  114. int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf,
  115.           int count, MPI_Datatype datatype, MPI_Status *status);
  116. int MPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf,
  117.           int count, MPI_Datatype datatype, MPI_Status *status);
  118. int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf,
  119.           int count, MPI_Datatype datatype, MPI_Status *status);
  120.  
  121. int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf,
  122.           int count, MPI_Datatype datatype, MPI_Request *request);
  123. int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf,
  124.           int count, MPI_Datatype datatype, MPI_Request *request);
  125.  
  126. /* Section 9.4.3 */
  127. int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype
  128.          datatype, MPI_Status *status); 
  129. int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype
  130.          datatype, MPI_Status *status); 
  131. int MPI_File_write(MPI_File fh, void *buf, int count, MPI_Datatype
  132.           datatype, MPI_Status *status);
  133. int MPI_File_write_all(MPI_File fh, void *buf, int count, MPI_Datatype
  134.           datatype, MPI_Status *status);
  135.  
  136. int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype
  137.          datatype, MPI_Request *request); 
  138. int MPI_File_iwrite(MPI_File fh, void *buf, int count, MPI_Datatype
  139.           datatype, MPI_Request *request);
  140.  
  141. int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence);
  142. int MPI_File_get_position(MPI_File fh, MPI_Offset *offset);
  143. int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, 
  144.                                      MPI_Offset *disp);
  145.  
  146. /* Section 9.4.4 */
  147. int MPI_File_read_shared(MPI_File fh, void *buf, int count, 
  148.                          MPI_Datatype datatype, MPI_Status *status);
  149. int MPI_File_write_shared(MPI_File fh, void *buf, int count, 
  150.                           MPI_Datatype datatype, MPI_Status *status);
  151. int MPI_File_iread_shared(MPI_File fh, void *buf, int count, 
  152.                           MPI_Datatype datatype, MPI_Request *request);
  153. int MPI_File_iwrite_shared(MPI_File fh, void *buf, int count, 
  154.                            MPI_Datatype datatype, MPI_Request *request);
  155. int MPI_File_read_ordered(MPI_File fh, void *buf, int count, 
  156.                           MPI_Datatype datatype, MPI_Status *status);
  157. int MPI_File_write_ordered(MPI_File fh, void *buf, int count, 
  158.                            MPI_Datatype datatype, MPI_Status *status);
  159. int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence);
  160. int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset);
  161.  
  162. /* Section 9.4.5 */
  163. int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
  164.                                int count, MPI_Datatype datatype);
  165. int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
  166. int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
  167.                                 int count, MPI_Datatype datatype);
  168. int MPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
  169. int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, 
  170.                             MPI_Datatype datatype);
  171. int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status);
  172. int MPI_File_write_all_begin(MPI_File fh, void *buf, int count, 
  173.                              MPI_Datatype datatype);
  174. int MPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status);
  175. int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, 
  176.                                 MPI_Datatype datatype);
  177. int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
  178. int MPI_File_write_ordered_begin(MPI_File fh, void *buf, int count, 
  179.                                  MPI_Datatype datatype);
  180. int MPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
  181.  
  182. /* Section 9.5.1 */
  183. int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, 
  184.                                      MPI_Aint *extent);
  185.  
  186. /* Section 9.6.1 */
  187. int MPI_File_set_atomicity(MPI_File fh, int flag);
  188. int MPI_File_get_atomicity(MPI_File fh, int *flag);
  189. int MPI_File_sync(MPI_File fh);
  190.  
  191. /* Section 4.13.3 */
  192. int MPI_File_set_errhandler( MPI_File, MPI_Errhandler );
  193. int MPI_File_get_errhandler( MPI_File, MPI_Errhandler * );
  194.  
  195. #ifndef HAVE_MPI_DARRAY_SUBARRAY
  196. /* Section 4.14.4 */
  197. int MPI_Type_create_subarray(int ndims, int *array_of_sizes, int
  198.                       *array_of_subsizes, int *array_of_starts, int order, 
  199.                       MPI_Datatype oldtype, MPI_Datatype *newtype);
  200.  
  201. /* Section 4.14.5 */
  202. int MPI_Type_create_darray(int size, int rank, int ndims, 
  203.                     int *array_of_gsizes, int *array_of_distribs, 
  204.                     int *array_of_dargs, int *array_of_psizes, 
  205.                     int order, MPI_Datatype oldtype, MPI_Datatype *newtype);
  206. #endif
  207.  
  208. /* The globus2 device has to rename MPI_ symbols in order to use the vendor
  209.    MPI as one of its transport mechanisms.  Therefore, the following undefines
  210.    should only happen if MPICH_RENAMING_MPI_FUNCS is not defined. */
  211. /* Section 4.12.4 */
  212. #if !defined(MPICH_RENAMING_MPI_FUNCS)
  213. #ifdef MPI_File_f2c
  214. #undef MPI_File_f2c
  215. #endif
  216. #ifdef MPI_File_c2f
  217. #undef MPI_File_c2f
  218. #endif
  219. #endif
  220. /* above needed for some versions of mpi.h in MPICH!! */
  221. MPI_File MPI_File_f2c(MPI_Fint fh);
  222. MPI_Fint MPI_File_c2f(MPI_File fh);
  223.  
  224. int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status);
  225. int MPIO_Wait(MPIO_Request *request, MPI_Status *status);
  226. MPI_Fint MPI_Request_c2f(MPI_Request request);
  227. MPI_Request MPI_Request_f2c(MPI_Fint request);
  228.  
  229. /* info functions if not defined in the MPI implementation */
  230. #ifndef HAVE_MPI_INFO
  231.  
  232. int MPI_Info_create(MPI_Info *info);
  233. int MPI_Info_set(MPI_Info info, char *key, char *value);
  234. int MPI_Info_delete(MPI_Info info, char *key);
  235. int MPI_Info_get(MPI_Info info, char *key, int valuelen, 
  236.                          char *value, int *flag);
  237. int MPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, 
  238.                                   int *flag);
  239. int MPI_Info_get_nkeys(MPI_Info info, int *nkeys);
  240. int MPI_Info_get_nthkey(MPI_Info info, int n, char *key);
  241. int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo);
  242. int MPI_Info_free(MPI_Info *info);
  243.  
  244. /* The globus2 device has to rename MPI_ symbols in order to use the vendor
  245.    MPI as one of its transport mechanisms.  Therefore, the following undefines
  246.    should only happen if MPICH_RENAMING_MPI_FUNCS is not defined. */
  247. #if !defined(MPICH_RENAMING_MPI_FUNCS)
  248. #ifdef MPI_Info_f2c
  249. #undef MPI_Info_f2c
  250. #endif
  251. #ifdef MPI_Info_c2f
  252. #undef MPI_Info_c2f
  253. #endif
  254. #endif
  255. /* above needed for some versions of mpi.h in MPICH!! */
  256. MPI_Fint MPI_Info_c2f(MPI_Info info);
  257. MPI_Info MPI_Info_f2c(MPI_Fint info);
  258. #endif
  259.  
  260. #endif   /* HAVE_PRAGMA_HP_SEC_DEF */
  261.  
  262.  
  263. /**************** BINDINGS FOR THE PROFILING INTERFACE ***************/
  264.  
  265.  
  266. /* Section 9.2 */
  267. int PMPI_File_open(MPI_Comm comm, char *filename, int amode, 
  268.                            MPI_Info info, MPI_File *fh);
  269. int PMPI_File_close(MPI_File *fh);
  270. int PMPI_File_delete(char *filename, MPI_Info info);
  271. int PMPI_File_set_size(MPI_File fh, MPI_Offset size);
  272. int PMPI_File_preallocate(MPI_File fh, MPI_Offset size);
  273. int PMPI_File_get_size(MPI_File fh, MPI_Offset *size);
  274. int PMPI_File_get_group(MPI_File fh, MPI_Group *group);
  275. int PMPI_File_get_amode(MPI_File fh, int *amode);
  276. int PMPI_File_set_info(MPI_File fh, MPI_Info info);
  277. int PMPI_File_get_info(MPI_File fh, MPI_Info *info_used);
  278.  
  279. /* Section 9.3 */
  280. int PMPI_File_set_view(MPI_File fh, MPI_Offset disp, 
  281.     MPI_Datatype etype, MPI_Datatype filetype, char *datarep, MPI_Info info);
  282. int PMPI_File_get_view(MPI_File fh, MPI_Offset *disp, 
  283.       MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep);
  284.  
  285. /* Section 9.4.2 */
  286. int PMPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf,
  287.           int count, MPI_Datatype datatype, MPI_Status *status);
  288. int PMPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf,
  289.           int count, MPI_Datatype datatype, MPI_Status *status);
  290. int PMPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf,
  291.           int count, MPI_Datatype datatype, MPI_Status *status);
  292. int PMPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf,
  293.           int count, MPI_Datatype datatype, MPI_Status *status);
  294.  
  295. /* nonblocking calls currently use MPI_Request, because generalized
  296.    requests not yet implemented. For the same reason, MPIO_Test and 
  297.    MPIO_Wait are used to test and wait on nonblocking I/O requests */ 
  298.  
  299. int PMPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf,
  300.           int count, MPI_Datatype datatype, MPI_Request *request);
  301. int PMPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf,
  302.           int count, MPI_Datatype datatype, MPI_Request *request);
  303.  
  304. /* Section 9.4.3 */
  305. int PMPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype
  306.                            datatype, MPI_Status *status); 
  307. int PMPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype
  308.                            datatype, MPI_Status *status); 
  309. int PMPI_File_write(MPI_File fh, void *buf, int count, MPI_Datatype
  310.                         datatype, MPI_Status *status);
  311. int PMPI_File_write_all(MPI_File fh, void *buf, int count, MPI_Datatype
  312.                             datatype, MPI_Status *status);
  313.  
  314. /* nonblocking calls currently use MPI_Request, because generalized
  315.    requests not yet implemented. For the same reason, MPIO_Test and 
  316.    MPIO_Wait are used to test and wait on nonblocking I/O requests */ 
  317.  
  318. int PMPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype
  319.                         datatype, MPI_Request *mpi_request); 
  320. int PMPI_File_iwrite(MPI_File fh, void *buf, int count, MPI_Datatype
  321.                          datatype, MPI_Request *request);
  322.  
  323. int PMPI_File_seek(MPI_File fh, MPI_Offset offset, int whence);
  324. int PMPI_File_get_position(MPI_File fh, MPI_Offset *offset);
  325. int PMPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, 
  326.                                       MPI_Offset *disp);
  327.  
  328. /* Section 9.4.4 */
  329. int PMPI_File_read_shared(MPI_File fh, void *buf, int count, 
  330.                          MPI_Datatype datatype, MPI_Status *status);
  331. int PMPI_File_write_shared(MPI_File fh, void *buf, int count, 
  332.                           MPI_Datatype datatype, MPI_Status *status);
  333. int PMPI_File_iread_shared(MPI_File fh, void *buf, int count, 
  334.                           MPI_Datatype datatype, MPI_Request *request);
  335. int PMPI_File_iwrite_shared(MPI_File fh, void *buf, int count, 
  336.                            MPI_Datatype datatype, MPI_Request *request);
  337. int PMPI_File_read_ordered(MPI_File fh, void *buf, int count, 
  338.                           MPI_Datatype datatype, MPI_Status *status);
  339. int PMPI_File_write_ordered(MPI_File fh, void *buf, int count, 
  340.                            MPI_Datatype datatype, MPI_Status *status);
  341. int PMPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence);
  342. int PMPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset);
  343.  
  344. /* Section 9.4.5 */
  345. int PMPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
  346.                                int count, MPI_Datatype datatype);
  347. int PMPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
  348. int PMPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
  349.                                 int count, MPI_Datatype datatype);
  350. int PMPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
  351. int PMPI_File_read_all_begin(MPI_File fh, void *buf, int count, 
  352.                             MPI_Datatype datatype);
  353. int PMPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status);
  354. int PMPI_File_write_all_begin(MPI_File fh, void *buf, int count, 
  355.                              MPI_Datatype datatype);
  356. int PMPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status);
  357. int PMPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, 
  358.                                 MPI_Datatype datatype);
  359. int PMPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
  360. int PMPI_File_write_ordered_begin(MPI_File fh, void *buf, int count, 
  361.                                  MPI_Datatype datatype);
  362. int PMPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
  363.  
  364. /* Section 9.5.1 */
  365. int PMPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, 
  366.                                       MPI_Aint *extent);
  367.  
  368. /* Section 9.6.1 */
  369. int PMPI_File_set_atomicity(MPI_File fh, int flag);
  370. int PMPI_File_get_atomicity(MPI_File fh, int *flag);
  371. int PMPI_File_sync(MPI_File fh);
  372.  
  373. /* Section 4.13.3 */
  374. int PMPI_File_set_errhandler( MPI_File, MPI_Errhandler );
  375. int PMPI_File_get_errhandler( MPI_File, MPI_Errhandler * );
  376.  
  377. #ifndef HAVE_MPI_DARRAY_SUBARRAY
  378. /* Section 4.14.4 */
  379. int PMPI_Type_create_subarray(int ndims, int *array_of_sizes, int
  380.                       *array_of_subsizes, int *array_of_starts, int order, 
  381.                       MPI_Datatype oldtype, MPI_Datatype *newtype);
  382.  
  383. /* Section 4.14.5 */
  384. int PMPI_Type_create_darray(int size, int rank, int ndims, 
  385.                     int *array_of_gsizes, int *array_of_distribs, 
  386.                     int *array_of_dargs, int *array_of_psizes, 
  387.                     int order, MPI_Datatype oldtype, MPI_Datatype *newtype);
  388. #endif
  389.  
  390. /* Section 4.12.4 */
  391. MPI_File PMPI_File_f2c(MPI_Fint fh);
  392. MPI_Fint PMPI_File_c2f(MPI_File fh);
  393.  
  394. /* The foll. functions are required, because an MPI_Request object
  395.    is currently used for nonblocking I/O. These functions will go away
  396.    after generalized requests are implemented. */
  397. int PMPIO_Test(MPI_Request *request, int *flag, MPI_Status *status);
  398. int PMPIO_Wait(MPI_Request *request, MPI_Status *status);
  399. MPI_Fint PMPIO_Request_c2f(MPI_Request request);
  400. MPI_Request PMPIO_Request_f2c(MPI_Fint request);
  401.  
  402.  
  403. /* info functions if not defined in the MPI implementation */
  404. #ifndef HAVE_MPI_INFO
  405.  
  406. int PMPI_Info_create(MPI_Info *info);
  407. int PMPI_Info_set(MPI_Info info, char *key, char *value);
  408. int PMPI_Info_delete(MPI_Info info, char *key);
  409. int PMPI_Info_get(MPI_Info info, char *key, int valuelen, 
  410.                          char *value, int *flag);
  411. int PMPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, 
  412.                                   int *flag);
  413. int PMPI_Info_get_nkeys(MPI_Info info, int *nkeys);
  414. int PMPI_Info_get_nthkey(MPI_Info info, int n, char *key);
  415. int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo);
  416. int PMPI_Info_free(MPI_Info *info);
  417.  
  418. MPI_Fint PMPI_Info_c2f(MPI_Info info);
  419. MPI_Info PMPI_Info_f2c(MPI_Fint info);
  420. #endif
  421.  
  422. #if defined(__cplusplus)
  423. }
  424. #endif
  425.  
  426. #endif
  427.